﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Translator
{
    public class InputAdapter
    {
        static bool HexCharToByte(char ch, ref byte res)
        {
            if (ch>='0' && ch<='9')
            {
                res = (byte)(ch - '0');
            }
            else if (ch>='a' && ch<='f')
            {
                res = (byte)(ch - 'a' + 10);
            }
            else if (ch >= 'A' && ch <= 'F')
            {
                res = (byte)(ch - 'A' + 10);
            }
            else
            {
                return false;
            }
            return true;
        }

        static int StringToHexBytesArray(string str, ref byte[] result)
        {
            int i = 0;
            int nLen = 0;
            byte bres = 0;
            for (i = 0; i < str.Length; ++i)
            {
                if (str[i] == ' ')
                {
                    continue;
                }
                if (HexCharToByte(str[i], ref bres))
                {
                    if (result != null)
                    {
                        int idx = nLen / 2;
                        if (idx < result.Length)
                        {
                            if (nLen % 2 == 0)
                            {
                                result[idx] = (byte)(bres << 4);
                            }
                            else
                            {
                                result[idx] += bres;
                            }
                        }
                    }
                    ++nLen;
                }
                else
                {
                    break;
                }
            }
            return nLen/2;
        }
        public static byte[] StringToHexBytesArray(string str)
        {
            byte[] result = null;
            int nLen = StringToHexBytesArray(str, ref result);
            if (nLen > 0)
            {
                result = new byte[nLen];
                StringToHexBytesArray(str, ref result);
            }
            return result;
        }
    }
}
